#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "repositorio.h"

void abreFacesIntegrais (double** imagem, int num, int largura, int altura){
    FILE *p;
    char nomeArquivo[50];
    //sprintf(nomeArquivo, "viola/face (%d).iim", num+1);
    //sprintf(nomeArquivo, "train/face/face (%d).iim", num+1);
    sprintf(nomeArquivo, "ppos/plaqueta (%d).iim", num);
    p = fopen (nomeArquivo,"rb+");
    size_t lSize;

    if (p != NULL)
    {
        int i, j, x, y;
        double integral[largura][altura];
        fseek (p , 0 , SEEK_END);
        lSize = ftell (p);
        rewind (p);

        fread (integral,1,lSize,p);

        double somatorio = 0;

        for (i = 0; i < largura; i++){
            for (j = 0; j < altura; j++){

                somatorio = 0;

                for (x = 0; x <= i; x++)
                    for (y = 0; y <= j; y++)
                        somatorio += integral[x][y];

                imagem[i][j] = somatorio;
            }
        }

        fclose (p);
    }

    fclose(p);
}

void abreNaoFacesIntegrais (double** imagem, int num, int largura, int altura){
    FILE *p;
    char nomeArquivo[50];
    //sprintf(nomeArquivo, "test/nonface/nonface (%d).iim", num+1);
    //sprintf(nomeArquivo, "train/nonface/nonface (%d).iim", num+1);
    sprintf(nomeArquivo, "pneg/negativa (%d).iim", num);
    p = fopen (nomeArquivo,"rb+");
    size_t lSize;

    if (p != NULL)
    {
        int i, j, x, y;
        double integral[largura][altura];
        fseek (p , 0 , SEEK_END);
        lSize = ftell (p);
        rewind (p);

        fread (integral,1,lSize,p);

        double somatorio = 0;

        for (i = 0; i < largura; i++){
            for (j = 0; j < altura; j++){

                somatorio = 0;

                for (x = 0; x <= i; x++)
                    for (y = 0; y <= j; y++)
                        somatorio += integral[x][y];

                imagem[i][j] = somatorio;
            }
        }

        fclose (p);
    }

    fclose(p);
}

double* carregaAlfas (int qtdAlfas, char* caminho){

    FILE *p;
    //p = fopen ("alfas.aad","rb+");
    //printf("\n%s",caminho);
    p = fopen (caminho,"rb+");
    size_t lSize;

    if (p != NULL)
    {
        fseek (p , 0 , SEEK_END);
        lSize = ftell (p);
        rewind (p);
        double *alfas = (double*) malloc (sizeof(double)*qtdAlfas);
        fread (alfas,1,lSize,p);
        fclose (p);
        return alfas;
    }

    fclose(p);
    return NULL;
}

CLASSIFICADOR* carregaClassificadoresFortes (char* caminho){
    FILE *p;
    //p = fopen ("classificadores_fortes.ada","rb+");
    p = fopen (caminho,"rb+");
    size_t lSize;

    if (p != NULL)
    {
        fseek (p , 0 , SEEK_END);
        lSize = ftell (p);
        rewind (p);
        CLASSIFICADOR *cls = (CLASSIFICADOR*) malloc (sizeof(CLASSIFICADOR)*lSize);
        fread (cls,1,lSize,p);
        fclose (p);
        return cls;
    }

    fclose(p);
    return NULL;
}

int carregaQuantidadeClassificadoresFortes(char *caminho){
    FILE *p;
    //char* caminho = "classificadores_fortes.ada";
    //p = fopen ("classificadores_fortes.ada","rb+");
    p = fopen (caminho,"rb+");
    size_t lSize;

    if (p != NULL)
    {
        fseek (p , 0 , SEEK_END);
        lSize = ftell (p);
        rewind (p);
        int i = lSize/sizeof(CLASSIFICADOR);
        fclose(p);
        return i;
    }

    fclose(p);
    return 0;
}
